package cn.qingyun.gis.modules.scenes.mapper;

import cn.qingyun.gis.modules.baogan.dto.VisitTotalDto;
import cn.qingyun.gis.modules.baogan.vo.AggRequest;
import cn.qingyun.gis.modules.baogan.vo.MapAggResponse;
import cn.qingyun.gis.modules.baogan.vo.request.AoiBaseInfoGetRequest;
import cn.qingyun.gis.modules.baogan.vo.request.DataQueryRequest;
import cn.qingyun.gis.modules.baogan.vo.request.PerimeterPointRequest;
import cn.qingyun.gis.modules.baogan.vo.request.PerimeterRequest;
import cn.qingyun.gis.modules.baogan.vo.response.*;
import cn.qingyun.gis.modules.scenes.entity.PoiChannelModel;
import cn.qingyun.gis.modules.scenes.entity.PoiScenario;
import cn.qingyun.gis.modules.scenes.request.*;
import cn.qingyun.gis.modules.scenes.response.*;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * Mapper 接口
 * </p>
 *
 * @author guest
 * @since 2024-04-27
 */
@DS("scenes_offensive")
public interface PoiScenarioMapper extends BaseMapper<PoiScenario> {

    /**
     * 通过id查询任务详情
     *
     * @param id
     * @return
     */
    TaskDetailResponse queryTaskDetailById(String id);

    TaskDetailResponse queryPoiDataById(@Param("id") String id, @Param("table") String table);

    /**
     * 后台---poi信息详情查看
     *
     * @param poiInfoDetailRequest
     * @return
     */
    PoiInfoDetailResponse queryPoiInfoDetailById(@Param("request") PoiInfoDetailRequest poiInfoDetailRequest, @Param("table") String table);

    List<ScenesExportDto> selectDetailPage(@Param("pageNum") long pageNum, @Param("pageSize") long pageSize, @Param("code") String code, @Param("level") int level);

    List<ScenesExportDto> selectCityDetail(@Param("disCode") String disCode);

    List<ScenesPageDto> selectDetailCondPage(@Param("pageNum") long pageNum, @Param("pageSize") long pageSize, @Param("code") String code, @Param("level") int level, @Param("kwPhone") String kwPhone, @Param("kwState") Integer kwState);

    /**
     * 摸排后台数据列表查询-改造
     *
     * @param poiChannelRequest
     * @return
     */
    List<ScenesPageDto> selectDetailCondPageNew(@Param("request") PoiChannelRequest poiChannelRequest, @Param("tables") List<String> tables, @Param("level") Integer level);

    /**
     * 摸排后台数据列表查询-改造-没有分页
     *
     * @param poiChannelRequest
     * @param tables
     * @param level
     * @return
     */
    List<ScenesPageDto> selectDetailCondNewSub(@Param("request") PoiChannelRequest poiChannelRequest, @Param("tables") List<String> tables, @Param("level") Integer level);

    int selectDetailCount(@Param("code") String code, @Param("level") Integer level, @Param("kwPhone") String kwPhone, @Param("kwState") Integer kwState);

    /**
     * 计算全量摸排数据个数
     *
     * @param poiChannelRequest
     * @param table
     * @return
     */
    int selectDetailCountNew(@Param("request") PoiChannelRequest poiChannelRequest, @Param("table") String table, @Param("level") Integer level);

    /**
     * 查询渠道、自有、直销人员的
     *
     * @param channelCode 渠道码
     * @param zxNumber    直销工号
     * @param zyNumber    自有工号
     * @param table       表
     * @return UnFollowPoiDto
     */
    UnFollowPoiDto selectGridCode(@Param("channelCode") String channelCode, @Param("zxNumber") String zxNumber, @Param("zyNumber") String zyNumber, @Param("table") String table);

    /**
     * 查询渠道、自有、直销人员权限列表
     *
     * @param channelCode
     * @param zxNumber
     * @param zyNumber
     * @param table
     * @return
     */
    List<UnFollowPoiDto> selectGridCodeList(@Param("channelCode") String channelCode, @Param("zxNumber") String zxNumber, @Param("zyNumber") String zyNumber, @Param("table") String table);

    /**
     * 首页数据信息个数统计
     *
     * @param poiCountRequest
     * @return
     */
    List<PoiSceneCount> selectSceneCount(@Param("request") PoiCountRequest poiCountRequest, @Param("table") String table, @Param("level") Integer level);

    /**
     * 六大场景个数统计
     *
     * @param poiCountRequest
     * @param table
     * @param level
     * @return
     */
    List<PoiSceneCount> selectSceneCountSub(@Param("request") PoiCountRequest poiCountRequest, @Param("table") String table, @Param("level") Integer level);

    /**
     * 查询宽带客户数
     *
     * @param poiCountRequest
     * @param table
     * @param level
     * @return
     */
    Integer selectKdClientNum(@Param("request") PoiCountRequest poiCountRequest, @Param("table") String table, @Param("level") Integer level);

    /**
     * 查询我的摸排个数
     *
     * @param poiCountRequest
     * @param table
     * @param level
     * @return
     */
    Integer selectMyselfKwCount(@Param("request") PoiCountRequest poiCountRequest, @Param("table") String table, @Param("level") Integer level);

    /**
     * 具体场景信息个数统计
     *
     * @param poiCountRequest
     * @param table
     * @param level
     * @return
     */
    List<PoiSceneCount> selectSpecificSceneCount(@Param("request") PoiCountRequest poiCountRequest, @Param("table") String table, @Param("level") Integer level);

    /**
     * 查询具体场景建筑数、企业数、已随访、未随访个数
     *
     * @param poiCountRequest
     * @param table
     * @param level
     * @return
     */
    List<PoiSceneCount> selectSpecificSceneKwPoiNum(@Param("request") PoiCountRequest poiCountRequest, @Param("table") String table, @Param("level") Integer level);

    /**
     * 首页可视区域搜索接口
     *
     * @param request
     * @param table
     * @param level
     * @return
     */
    List<IndexAroundResponse> selectIndexQuery(@Param("request") IndexAroundNewRequest request, @Param("table") String table, @Param("level") Integer level, @Param("code") String code);

    /**
     * @param poiIds
     * @return
     */
    List<PoiSceneCount> selectBuildCountTotal(@Param("list") List<String> poiIds);

    /**
     * poi勘误记录查询
     *
     * @param id
     * @param table
     * @return
     */
    List<TaskDetailResponse> kwPeopleRecordQuery(@Param("id") String id, @Param("table") String table);

    /**
     * 查询省市区网格中心点数据
     *
     * @param request
     * @param level
     * @return
     */
    List<TogetherResponse> selectListData(@Param("request") IndexTogetherRequest request, @Param("level") Integer level, @Param("table") String table);

    /**
     * 是否是企业
     *
     * @param poiIdList
     * @return
     */
    List<String> istBuildPoi(@Param("list") List<String> poiIdList);

    /**
     * 根据 poi和归属建筑poi 查询
     *
     * @param listFirst
     * @return
     */
    List<PoiChannelModel> hasExistBuildPoiId(@Param("list") List<PoiChannelModel> listFirst);

    /**
     * 根据 poi和归属建筑poi为null 查询
     *
     * @param listSecond
     * @return
     */
    List<PoiChannelModel> hasExistBuildPoiIdPro(@Param("list") List<PoiChannelModel> listSecond);

    /**
     * 入住企业查询
     *
     * @param poiIPage
     * @param request
     * @return
     */
    IPage<PoiListResponse> selectPoiSettledPagePoi(@Param("page") IPage<?> poiIPage, @Param("request") PoiPageRequest request);

    /**
     * 楼宇明细查询
     *
     * @param request
     * @return
     */
    List<BuildingDetailResponse> selectBuildingDetail(@Param("request") BuildDetailRequest request);

    Boolean deletePoiData(@Param("list") List<String> poiIdList, @Param("regionCityCode") String regionCityCode);

    List<PoiScenario> selectPoiIdCommonEntity(@Param("regionCityCode") String regionCityCode, @Param("list") List<String> poiIdList);

    List<String> selectPoiIdCommon(@Param("regionCityCode") String regionCityCode, @Param("list") List<String> poiIdList);

    /**
     * 获取与该点最近的一条poi数据
     *
     * @param points
     * @return
     */
    PoiScenario getPoiData(@Param("points") String points);

    /**
     * 查询建筑下的（企业+自身建筑）是否都随访完毕
     *
     * @param belongBuildId
     * @return
     */
    Integer selectKwStateCount(@Param("belongBuildId") String belongBuildId,@Param("regionCityCode") String regionCityCode);

    /**
     * 网格变化的数据
     * @param id
     * @param regionCityCode
     * @return
     */
    List<PoiScenario> selectChangedListData(@Param("id") String id,@Param("regionCityCode") String regionCityCode);

    /**
     * 微网格变化的数据
     * @param id
     * @param regionCityCode
     * @return
     */
    List<PoiScenario> selectMicroChangedListData(@Param("id") String id,@Param("regionCityCode") String regionCityCode);

    /**
     * 包干地图聚合查询
     *
     * @param request
     * @param level
     * @return
     */
    List<MapAggResponse> selectAggList(@Param("request") AggRequest request, @Param("flag") Integer flag,@Param("level") Integer level);

    /**
     * 查询微网格详情
     * @param microGridCode
     * @param id
     * @return
     */
    MGridDetailRes selectMicroDetail(@Param("microGridCode") String microGridCode, String id);

    /**
     * 查询微网格下已随访总数和未随访总数
     * @param microGridCode
     * @return
     */
    VisitTotalDto selectVisitTotal(@Param("microGridCode") String microGridCode);

    /**
     * 查询微网格下企业总数
     * @param microGridCode
     * @return
     */
    Integer selectEnterpriseTotal(@Param("microGridCode") String microGridCode);


    /**
     * 查询微网格内的企业列表
     *
     * @param microGridCode
     * @param flag
     * @return
     */
    List<EnterpriseResponse> selectEnterpriseList(@Param("microGridCode") String microGridCode, @Param("flag") Integer flag);

    /**
     * 查询poi基础数据
     * @param request
     * @param level
     * @return
     */
    List<DataResponse> selectPoiDataInfo(@Param("request") DataQueryRequest request,@Param("level") Integer level);

    /**
     * 查询微网格下的poi基础数据
     * @param code
     * @return
     */
    List<DataResponse> selectMicroPoiDataInfo(@Param("code") String code,@Param("regionCityCode") String regionCityCode,@Param("types") List<String> types);


    /**
     * 查询微网格下建筑总数
     *
     * @param microGridCode
     * @param id
     * @param types
     * @return
     */
    Integer selectMGBuildingTotal(@Param("microGridCode") String microGridCode, @Param("id") String id, @Param("types") List<String> types);

    /**
     * 查询微网格下企业总数
     *
     * @param microGridCode
     * @param id
     * @param types
     * @return
     */
    Integer selectMGEnterpriseTotal(@Param("microGridCode") String microGridCode, @Param("id") String id, @Param("types") List<String> types);

    /**
     * 查询微网格下随访总数和未随访总数
     *
     * @param microGridCode
     * @param id
     * @param types
     * @return
     */
    VisitTotalDto selectMGVisitTotal(@Param("microGridCode") String microGridCode, @Param("id") String id, @Param("types") List<String> types);

    /**
     * 查询点详情
     *
     * @param microGridCode
     * @param id
     * @return
     */
    PointDetailRes selectPointDetail(@Param("microGridCode") String microGridCode, @Param("id") String id);

    int getAoiBaseInfo(AoiBaseInfoGetRequest request);

    /**
     * 周边查询
     * @param request
     * @param level
     * @return
     */
    List<PerimeterDataResp> selectPerimeterPoiData(@Param("request") PerimeterRequest request, @Param("code") String code,@Param("level") Integer level);

    /**
     * 查询具体面的点数据
     * @param request
     * @param level
     * @return
     */
    List<PoiScenario> selectPerimeterPointData(@Param("request") PerimeterPointRequest request, @Param("level") Integer level);
}
